home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Celestin Apprentice 5
/
Apprentice-Release5.iso
/
Source Code
/
C
/
Frameworks
/
TransSkel 3.24
/
Demos
/
Pascal Demos
/
Button
/
Modal2.p
< prev
next >
Wrap
Text File
|
1996-01-24
|
3KB
|
120 lines
unit Modal2;
interface
uses
Types, MixedMode, QuickDraw, Windows, Dialogs, OSUtils, TransSkel, ButtonGlobals;
procedure DoModal2;
implementation
const
findItem = 1;
cancelItem = 2;
staticTextItem = 3;
editTextItem = 4;
outlineItem = 5;
var
defaultButton: Integer;
drawProc: UserItemUPP;
{--------------------------------------------------------------------}
{ Dialog 2 procedures }
{--------------------------------------------------------------------}
procedure OutlineButton (dlog: DialogPtr; item: Integer);
begin
SkelDrawButtonOutline(SkelGetDlogCtl(dlog, defaultButton));
end;
procedure SetDefaultButton (dlog: DialogPtr; item: Integer);
var
r: Rect;
begin
defaultButton := item;
SkelGetDlogRect(dlog, defaultButton, r); { get button rect }
InsetRect(r, -4, -4); { expand it }
SkelSetDlogRect(dlog, outlineItem, r); { use for outline item }
SkelSetDlogProc(dlog, outlineItem, drawProc);
SkelDrawButtonOutline(SkelGetDlogCtl(dlog, defaultButton));
end;
procedure DoModal2;
var
filter: ModalFilterProcPtr;
dlog: DialogPtr;
savePort: GrafPtr;
item: Integer;
newDefault: Integer;
str: Str255;
loop: Boolean;
begin
dlog := GetNewDialog(modal2Res, nil, WindowPtr(-1));
if (dlog = DialogPtr(nil)) then
begin
SysBeep(1);
exit(DoModal2);
end;
SkelPositionWindow(dlog, skelPositionOnMainDevice, horizRatio, vertRatio);
GetPort(savePort);
SetPort(dlog);
{
Set up a variable to point to the outline drawing procedure. For 68K code
this is just a direct pointer to OutlineButton(). For PowerPC code it is a
routine descriptor into which the address of OutlineButton() is stuffed.
}
drawProc := NewUserItemProc (@OutlineButton);
{ should really check whether or not drawProc is nil! }
SetDefaultButton(dlog, cancelItem);
ShowWindow(dlog);
loop := true;
while (loop) do
begin
filter := SkelDlogFilter(nil, true);
SkelDlogDefaultItem(defaultButton);
SkelDlogCancelItem(cancelItem);
SkelDlogTracksCursor(true);
ModalDialog(filter, item);
SkelRmveDlogFilter;
if ((item = findItem) or (item = cancelItem)) then
loop := false
else
begin
SkelGetDlogStr(dlog, editTextItem, str);
if (length(str) > 0) then
newDefault := findItem
else
newDefault := cancelItem;
if (newDefault <> defaultButton) then
begin
SkelEraseButtonOutline(SkelGetDlogCtl(dlog, defaultButton));
SetDefaultButton(dlog, newDefault);
end;
end;
end;
DisposeRoutineDescriptor (drawProc);
DisposeDialog(dlog);
SetPort(savePort);
end;
end.